package reflect;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 反射机制
 * 反射是java的动态机制，允许程序在【运行期间】实例化对象，调用方法，操作属性。
 */
public class ReflectDemo {
    public static void main(String[] args) {
        /*
        反射第一步：获取类对象 java.lang.Class
        JVM每次加载一个类，都会生成一个对应的Class对象。
        Class类是反射的源头，所有的反射操作都是通过Class对象来完成。
        每一个类都有一个与之对应的Class对象，Class对象记载了类的完全信息。
         */
        Class cc1 = String.class;
        System.out.println(cc1);
        Class cc2 = int.class;
        /*
        通过指定类的完全限定名称，获取对应的Class对象。
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个类名：");
        String name = scanner.nextLine();
        try {
            Class c = Class.forName(name);
            System.out.println(c);
            System.out.println(c.getName());
            System.out.println(c.getPackage());
            System.out.println(c.getSimpleName());
            System.out.println(Arrays.toString(c.getMethods()));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            scanner.close();
        }

    }
}
